package com.inpion.board.dao;

import java.util.List;

import com.inpion.board.criteria.BoardCriteria;
import com.inpion.board.entity.Board;
import com.inpion.board.entity.BoardItem;
import com.inpion.board.entity.Label;

public interface BoardDao {
	
	/**
	 * 새로운 게시판을 생성한다.
	 * @param board
	 */
	void insertBoard(Board board);

	/**
	 * 새로운 게시판번호를 채번한다.
	 * @return 게시판번호
	 */
	String selectNewBoardNo();
	
	/**
	 * 게시판을 조회한다.
	 * @param boardNo 게시판번호
	 * @return 게시판
	 */
	Board selectBoard(String boardNo);
	
	/**
	 * 새로운 레이블을 추가한다.
	 * @param label 레이블 내역
	 */
	void insertLabel(Label label);
	
	/**
	 * 새로운 레이블번호를 채번한다.
	 * @return 레이블번호
	 */
	String selectNewLabelNo();
	
	/**
	 * 게시판에 해당하는 레이블 목록을 조회한다.
	 * @param boardNo 게시판번호
	 * @return 레이블 목록
	 */
	List<Label> selectLabelListByBoardNo(String boardNo);
	
	/**
	 * 새로운 게시물을 등록한다.
	 * @param boardItem 게시물
	 */
	void insertBoardItem(BoardItem boardItem);
	
	/**
	 * 새로운 게시물번호를 채번한다.
	 * @return 게시물번호
	 */
	String selectNewBoardItemNo();
	
	/**
	 * 게시물을 조회한다.
	 * @param boardItemNo 게시물번호
	 * @return 게시물
	 */
	BoardItem selectBoardItem(String boardItemNo);
	
	/**
	 * 조회조건에 해당하는 게시물 갯수를 조회한다.
	 * @param criteria 조회조건
	 * @return 게시물 갯수
	 */
	long selectBoardItemCount(BoardCriteria criteria);
	
	/**
	 * 조회조건에 해당하는 게시물의 페이징된 목록을 조회한다.
	 * @param criteria 조회조건
	 * @return 게시물 목록
	 */
	List<BoardItem> selectBoardItemList(BoardCriteria criteria);
	
	/**
	 * 게시물 내용을 변경한다.
	 * @param boardItem 게시물
	 */
	void updateBoardItem(BoardItem boardItem);
	
	/**
	 * 게시물을 삭제한다.
	 * @param boardItemNo 게시물번호
	 */
	void deleteBoardItem(String boardItemNo);
	
}
